package com.example.demo7tcp4;


import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.*;

/**
 * 目标：BS架构的原理理解
 */
public class ServerDemo {
    public static void main(String[] args) throws Exception {
        System.out.println("服务端启动了...");
        // 1.创建一个服务端ServerSocket对象，绑定监听端口
        ServerSocket serverSocket = new ServerSocket(8080);

        // 创建线程吃
        ExecutorService pool = new ThreadPoolExecutor(3, 10, 10, TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(100),
                Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());

        while (true) {
            // 2.调用accept方法，阻塞等待客户端连接，一旦有客户端链接会返回一个Socket对象
            Socket socket = serverSocket.accept();
            System.out.println("一个客户端连接了上线了" + socket.getInetAddress().getHostAddress());
            // 3.把这个客户端管道包装成一个任务交给线程池处理
            // 注意：线程类可以直接当作任务对象使用 因为Thread类实现了Runnable接口
            pool.execute(new ServerReaderRunnable(socket));
        }
    }
}
